package com.example.vote.flow.config;

import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableKnife4j
public class Knife4jConfiguration {

    /**
     * 配置并返回自定义的OpenAPI索引信息
     * <p>此方法主要用于定义API的基本信息，如标题、版本、描述、服务条款、许可证信息以及联系人信息</p>
     * <p>这些信息有助于API的使用者了解API的目的、如何使用以及如何与API的提供者取得联系</p>
     *
     * @return OpenAPI 实例，包含了API的基本信息
     */
    @Bean
    public OpenAPI customOpenApiIndexInfo() {
        Contact contact = new Contact() // 创建联系人对象，用于设置API文档的联系信息
                .email("contact@example.com") // 设置联系人邮箱地址
                .name("admin") // 设置联系人姓名
                .url("https://www.example.com"); // 设置联系人主页URL


        return new OpenAPI() // 创建OpenAPI对象并开始配置
                .info(new Info() // 创建Info对象，设置API的基本信息
                        .title("VoteFlow 投票程序后台系统 在线API文档") // 设置API文档标题
                        .contact(contact) // 设置联系人信息
                        .version("1.0") // 设置API版本号
                        .description("VoteFlow 投票程序后台系统 在线API文档") // 设置API描述信息
                        .termsOfService("http://www.example.com") // 设置服务条款链接
                        .license(new License() // 创建License对象并设置许可证信息
                                .name("Apache 2.0") // 设置许可证名称
                                .url("http://www.example.com"))); // 设置许可证协议链接
    }

}
